/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package isd.inventario.web;

import isd.inventario.modelo.ST_Producto;
import isd.inventario.modelo.ST_TipoProducto;
import isd.inventario.rn.ProductoRN;
import isd.inventario.rn.TipoProductoRN;
import isd.general.util.JsfUtil;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;

/**
 *
 * @author Claudio
 */
@ManagedBean(name="buscadorProductoBean")
@SessionScoped
public class BuscadorProductoBean implements Serializable {

    @EJB private ProductoRN productoRN;
    @EJB private TipoProductoRN tipoProductoRN;

    private ST_Producto producto;
    private List<ST_Producto> listaProductos;
    private List<ST_TipoProducto> listaTipos;
    private ST_TipoProducto tipoProducto;

    Map<String,String> filtro;

    private String contenido;

    /** Creates a new instance of BuscadorProductoBean */
    public BuscadorProductoBean() {

    }

    @PostConstruct
    public void init(){
        
        producto = new ST_Producto();
        listaProductos = new ArrayList<ST_Producto>();  //productoRN.getLista();
        listaTipos = tipoProductoRN.getLista();
        filtro = new HashMap<String,String>();
    }

    public void filtrarProductos(){

        filtro.clear();

        if(tipoProducto!=null){
            filtro.put("tippro = ", "'"+tipoProducto.getTippro()+"'");
        }

        if(!contenido.isEmpty()){
            filtro.put("descrp LIKE ", "'%"+contenido.replaceAll(" ", "%" )+"%'");
        }
        
        listaProductos = productoRN.getProductosByFiltro(filtro);
    }

    public void limpiarProducto(){
        producto =null;
    }

    public void seleccionarProducto(ST_Producto p){
        producto = p;
//        System.out.println("Producto seleccionado: " + p.getDescrp());
    }

    public void buscarProductoByCodigo(){
        System.out.println(producto.getArtcod());
        producto = productoRN.getProductoByCodigo(producto.getArtcod());

        if (producto==null){
            JsfUtil.addWarningMessage("No se encontró el producto");
        }
    }

    public List<ST_Producto> completeProducto(String query) {
        try {
            listaProductos = productoRN.getProductos(query);
            return listaProductos;
            /**
            List<ST_Producto> suggestions = new ArrayList<ST_Producto>();
            for(ST_Producto p : listaProductos) {
            if(p.getDescrp().startsWith(query) || p.getArtcod().startsWith(query))
            suggestions.add(p);
            }
             */
        } catch (Exception ex) {

            Logger.getLogger(BuscadorProductoBean.class.getName()).log(Level.SEVERE, null, ex);
            return new ArrayList<ST_Producto>();
        }


    }

    //---------------------------------------------------------------------------
    public List<ST_Producto> getListaProductos() {
        return listaProductos;
    }

    public void setListaProductos(List<ST_Producto> listaProductos) {
        this.listaProductos = listaProductos;
    }

    public ST_Producto getProducto() {
        return producto;
    }

    public void setProducto(ST_Producto producto) {
        this.producto = producto;
    }

    public Map<String, String> getFiltro() {
        return filtro;
    }

    public void setFiltro(Map<String, String> filtro) {
        this.filtro = filtro;
    }

    public List<ST_TipoProducto> getListaTipos() {
        return listaTipos;
    }

    public void setListaTipos(List<ST_TipoProducto> listaTipos) {
        this.listaTipos = listaTipos;
    }

    public ST_TipoProducto getTipoProducto() {
        return tipoProducto;
    }

    public void setTipoProducto(ST_TipoProducto tipoProducto) {
        this.tipoProducto = tipoProducto;
    }

    public String getContenido() {
        return contenido;
    }

    public void setContenido(String contenido) {
        this.contenido = contenido;
    }
    

}
